//package com.mojito.common.util;
//
//import io.codis.jodis.CodisAgent;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.Collections;
//
///**
// * 分布式锁
// *
// * @author liufq
// * @since 2022/2/23 下午2:30
// */
//@Component
//@Slf4j
//public class RedisLockUtils {
//
//    @Resource
//    private CodisAgent codisAgent;
//
//    /**
//     * key 前缀
//     */
//    private static final String KEY_PREFIX = "redis_key_his_";
//    /**
//     * 默认超时时间
//     */
//    private static final int TIME_OUT = 10;
//
//
//    /**
//     * 自动归档分布式锁key
//     */
//    public static final String AUTOMATIC_FILING = "automatic_filing";
//
//    /**
//     * 加锁
//     */
//    public boolean tryLock(String key, String value) {
//        return tryLock(key, value, TIME_OUT);
//    }
//
//    public boolean tryLock(String key, String value, int time) {
//        boolean result = "OK".equals(codisAgent.set(KEY_PREFIX + key, value, "NX", "EX", time));
//        log.info("分布式锁：{}，获取{}", KEY_PREFIX + key, result ? "成功" : "失败");
//        return result;
//    }
//
//    /**
//     * 释放锁
//     */
//    public boolean unlock(String key, String value) {
//        String luaScript = "if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end";
//        boolean result = codisAgent.eval(luaScript, Collections.singletonList(KEY_PREFIX + key), Collections.singletonList(value)).equals(1L);
//        log.info("分布式锁：{}，释放{}", KEY_PREFIX + key, result ? "成功" : "失败");
//        return result;
//    }
//}
